<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>mxUndoManager</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/prettify.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad();prettyPrint();"><script language=JavaScript><!--
if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>

<!--  Generated by Natural Docs, version 1.51 -->
<!--  http://www.naturaldocs.org  -->

<!-- saved from url=(0026)http://www.naturaldocs.org -->




<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="mxUndoManager"></a>mxUndoManager</h1><div class=CBody><p>Implements a command history.&nbsp; When changing the graph model, an &lt;mxUndoableChange&gt; object is created at the start of the transaction (when model.beginUpdate is called).&nbsp; All atomic changes are then added to this object until the last model.endUpdate call, at which point the <a href="mxUndoableEdit-js.html#mxUndoableEdit" class=LClass id=link18 onMouseOver="ShowTip(event, 'tt13', 'link18')" onMouseOut="HideTip('tt13')">mxUndoableEdit</a> is dispatched in an event, and added to the history inside <a href="#mxUndoManager.mxUndoManager" class=LFunction id=link19 onMouseOver="ShowTip(event, 'tt4', 'link19')" onMouseOut="HideTip('tt4')">mxUndoManager</a>.&nbsp; This is done by an event listener in <a href="../editor/mxEditor-js.html#mxEditor.installUndoHandler" class=LFunction id=link20 onMouseOver="ShowTip(event, 'tt14', 'link20')" onMouseOut="HideTip('tt14')">mxEditor.installUndoHandler</a>.</p><p>Each atomic change of the model is represented by an object (eg.&nbsp; <a href="../model/mxGraphModel-js.html#mxRootChange" class=LClass id=link21 onMouseOver="ShowTip(event, 'tt15', 'link21')" onMouseOut="HideTip('tt15')">mxRootChange</a>, <a href="../model/mxGraphModel-js.html#mxChildChange" class=LClass id=link22 onMouseOver="ShowTip(event, 'tt16', 'link22')" onMouseOut="HideTip('tt16')">mxChildChange</a>, <a href="../model/mxGraphModel-js.html#mxTerminalChange" class=LClass id=link23 onMouseOver="ShowTip(event, 'tt17', 'link23')" onMouseOut="HideTip('tt17')">mxTerminalChange</a> etc) which contains the complete undo information.&nbsp; The <a href="#mxUndoManager.mxUndoManager" class=LFunction id=link24 onMouseOver="ShowTip(event, 'tt4', 'link24')" onMouseOut="HideTip('tt4')">mxUndoManager</a> also listens to the <a href="../view/mxGraphView-js.html#mxGraphView" class=LClass id=link25 onMouseOver="ShowTip(event, 'tt18', 'link25')" onMouseOut="HideTip('tt18')">mxGraphView</a> and stores it&rsquo;s changes to the current root as insignificant undoable changes, so that drilling (step into, step up) is undone.</p><p>This means when you execute an atomic change on the model, then change the current root on the view and click undo, the change of the root will be undone together with the change of the model so that the display represents the state at which the model was changed.&nbsp; However, these changes are not transmitted for sharing as they do not represent a state change.</p><h4 class=CHeading>Example</h4><p>When adding an undo manager to a graph, make sure to add it to the model and the view as well to maintain a consistent display across multiple undo/redo steps.</p><blockquote><pre class="prettyprint">var undoManager = new mxUndoManager();
var listener = function(sender, evt)
{
  undoManager.undoableEditHappened(evt.getProperty('edit'));
};
graph.getModel().addListener(mxEvent.UNDO, listener);
graph.getView().addListener(mxEvent.UNDO, listener);</pre></blockquote><p>The code creates a function that informs the undoManager of an undoable edit and binds it to the undo event of <a href="../model/mxGraphModel-js.html#mxGraphModel" class=LClass id=link26 onMouseOver="ShowTip(event, 'tt19', 'link26')" onMouseOut="HideTip('tt19')">mxGraphModel</a> and <a href="../view/mxGraphView-js.html#mxGraphView" class=LClass id=link27 onMouseOver="ShowTip(event, 'tt18', 'link27')" onMouseOut="HideTip('tt18')">mxGraphView</a> using <a href="mxEventSource-js.html#mxEventSource.addListener" class=LFunction id=link28 onMouseOver="ShowTip(event, 'tt20', 'link28')" onMouseOut="HideTip('tt20')">mxEventSource.addListener</a>.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#mxUndoManager" >mxUndoManager</a></td><td class=SDescription>Implements a command history. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#mxUndoManager.Events" >Events</a></td><td class=SDescription></td></tr><tr class="SEvent SIndent2 SMarked"><td class=SEntry><a href="#mxUndoManager.mxEvent.CLEAR" >mxEvent.<wbr>CLEAR</a></td><td class=SDescription>Fires after <a href="#mxUndoManager.clear" class=LFunction id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">clear</a> was invoked. </td></tr><tr class="SEvent SIndent2"><td class=SEntry><a href="#mxUndoManager.mxEvent.UNDO" >mxEvent.UNDO</a></td><td class=SDescription>Fires afer a significant edit was undone in <a href="#mxUndoManager.undo" class=LFunction id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">undo</a>. </td></tr><tr class="SEvent SIndent2 SMarked"><td class=SEntry><a href="#mxUndoManager.mxEvent.REDO" >mxEvent.REDO</a></td><td class=SDescription>Fires afer a significant edit was redone in <a href="#mxUndoManager.redo" class=LFunction id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">redo</a>. </td></tr><tr class="SEvent SIndent2"><td class=SEntry><a href="#mxUndoManager.mxEvent.ADD" >mxEvent.ADD</a></td><td class=SDescription>Fires after an undoable edit was added to the history. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#mxUndoManager.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#mxUndoManager.mxUndoManager" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">mxUndoManager</a></td><td class=SDescription>Constructs a new undo manager with the given history size. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#mxUndoManager.Variables" >Variables</a></td><td class=SDescription></td></tr><tr class="SVariable SIndent2 SMarked"><td class=SEntry><a href="#mxUndoManager.size" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">size</a></td><td class=SDescription>Maximum command history size. </td></tr><tr class="SVariable SIndent2"><td class=SEntry><a href="#mxUndoManager.history" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">history</a></td><td class=SDescription>Array that contains the steps of the command history.</td></tr><tr class="SVariable SIndent2 SMarked"><td class=SEntry><a href="#mxUndoManager.indexOfNextAdd" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">indexOfNextAdd</a></td><td class=SDescription>Index of the element to be added next.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#mxUndoManager.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#mxUndoManager.isEmpty" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">isEmpty</a></td><td class=SDescription>Returns true if the history is empty.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#mxUndoManager.clear" id=link9 onMouseOver="ShowTip(event, 'tt1', 'link9')" onMouseOut="HideTip('tt1')">clear</a></td><td class=SDescription>Clears the command history.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#mxUndoManager.canUndo" id=link10 onMouseOver="ShowTip(event, 'tt9', 'link10')" onMouseOut="HideTip('tt9')">canUndo</a></td><td class=SDescription>Returns true if an undo is possible.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#mxUndoManager.undo" id=link11 onMouseOver="ShowTip(event, 'tt2', 'link11')" onMouseOut="HideTip('tt2')">undo</a></td><td class=SDescription>Undoes the last change.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#mxUndoManager.canRedo" id=link12 onMouseOver="ShowTip(event, 'tt10', 'link12')" onMouseOut="HideTip('tt10')">canRedo</a></td><td class=SDescription>Returns true if a redo is possible.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#mxUndoManager.redo" id=link13 onMouseOver="ShowTip(event, 'tt3', 'link13')" onMouseOut="HideTip('tt3')">redo</a></td><td class=SDescription>Redoes the last change.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#mxUndoManager.undoableEditHappened" id=link14 onMouseOver="ShowTip(event, 'tt11', 'link14')" onMouseOut="HideTip('tt11')">undoableEditHappened</a></td><td class=SDescription>Method to be called to add new undoable edits to the <a href="#mxUndoManager.history" class=LVariable id=link15 onMouseOver="ShowTip(event, 'tt6', 'link15')" onMouseOut="HideTip('tt6')">history</a>.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#mxUndoManager.trim" id=link16 onMouseOver="ShowTip(event, 'tt12', 'link16')" onMouseOut="HideTip('tt12')">trim</a></td><td class=SDescription>Removes all pending steps after <a href="#mxUndoManager.indexOfNextAdd" class=LVariable id=link17 onMouseOver="ShowTip(event, 'tt7', 'link17')" onMouseOut="HideTip('tt7')">indexOfNextAdd</a> from the history, invoking die on each edit. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="mxUndoManager.Events"></a>Events</h3></div></div>

<div class="CEvent"><div class=CTopic><h3 class=CTitle><a name="mxUndoManager.mxEvent.CLEAR"></a>mxEvent.<wbr>CLEAR</h3><div class=CBody><p>Fires after <a href="#mxUndoManager.clear" class=LFunction id=link29 onMouseOver="ShowTip(event, 'tt1', 'link29')" onMouseOut="HideTip('tt1')">clear</a> was invoked.&nbsp; This event has no properties.</p></div></div></div>

<div class="CEvent"><div class=CTopic><h3 class=CTitle><a name="mxUndoManager.mxEvent.UNDO"></a>mxEvent.UNDO</h3><div class=CBody><p>Fires afer a significant edit was undone in <a href="#mxUndoManager.undo" class=LFunction id=link30 onMouseOver="ShowTip(event, 'tt2', 'link30')" onMouseOut="HideTip('tt2')">undo</a>.&nbsp; The &lt;code&gt;edit&lt;/code&gt; property contains the <a href="mxUndoableEdit-js.html#mxUndoableEdit" class=LClass id=link31 onMouseOver="ShowTip(event, 'tt13', 'link31')" onMouseOut="HideTip('tt13')">mxUndoableEdit</a> that was undone.</p></div></div></div>

<div class="CEvent"><div class=CTopic><h3 class=CTitle><a name="mxUndoManager.mxEvent.REDO"></a>mxEvent.REDO</h3><div class=CBody><p>Fires afer a significant edit was redone in <a href="#mxUndoManager.redo" class=LFunction id=link32 onMouseOver="ShowTip(event, 'tt3', 'link32')" onMouseOut="HideTip('tt3')">redo</a>.&nbsp; The &lt;code&gt;edit&lt;/code&gt; property contains the <a href="mxUndoableEdit-js.html#mxUndoableEdit" class=LClass id=link33 onMouseOver="ShowTip(event, 'tt13', 'link33')" onMouseOut="HideTip('tt13')">mxUndoableEdit</a> that was redone.</p></div></div></div>

<div class="CEvent"><div class=CTopic><h3 class=CTitle><a name="mxUndoManager.mxEvent.ADD"></a>mxEvent.ADD</h3><div class=CBody><p>Fires after an undoable edit was added to the history.&nbsp; The &lt;code&gt;edit&lt;/code&gt; property contains the <a href="mxUndoableEdit-js.html#mxUndoableEdit" class=LClass id=link34 onMouseOver="ShowTip(event, 'tt13', 'link34')" onMouseOut="HideTip('tt13')">mxUndoableEdit</a> that was added.</p></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="mxUndoManager.Functions"></a>Functions</h3></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="mxUndoManager.mxUndoManager"></a>mxUndoManager</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>function mxUndoManager(</td><td class="PParameter  prettyprint " nowrap>size</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Constructs a new undo manager with the given history size.&nbsp; If no history size is given, then a default size of 100 steps is used.</p></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="mxUndoManager.Variables"></a>Variables</h3></div></div>

<div class="CVariable"><div class=CTopic><h3 class=CTitle><a name="mxUndoManager.size"></a>size</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">mxUndoManager.prototype.size</td></tr></table></blockquote><p>Maximum command history size.&nbsp; 0 means unlimited history.&nbsp; Default is 100.</p></div></div></div>

<div class="CVariable"><div class=CTopic><h3 class=CTitle><a name="mxUndoManager.history"></a>history</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">mxUndoManager.prototype.history</td></tr></table></blockquote><p>Array that contains the steps of the command history.</p></div></div></div>

<div class="CVariable"><div class=CTopic><h3 class=CTitle><a name="mxUndoManager.indexOfNextAdd"></a>indexOfNextAdd</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">mxUndoManager.prototype.indexOfNextAdd</td></tr></table></blockquote><p>Index of the element to be added next.</p></div></div></div>

<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="mxUndoManager.Functions"></a>Functions</h3></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="mxUndoManager.isEmpty"></a>isEmpty</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">mxUndoManager.prototype.isEmpty = function()</td></tr></table></blockquote><p>Returns true if the history is empty.</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="mxUndoManager.clear"></a>clear</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">mxUndoManager.prototype.clear = function()</td></tr></table></blockquote><p>Clears the command history.</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="mxUndoManager.canUndo"></a>canUndo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">mxUndoManager.prototype.canUndo = function()</td></tr></table></blockquote><p>Returns true if an undo is possible.</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="mxUndoManager.undo"></a>undo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">mxUndoManager.prototype.undo = function()</td></tr></table></blockquote><p>Undoes the last change.</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="mxUndoManager.canRedo"></a>canRedo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">mxUndoManager.prototype.canRedo = function()</td></tr></table></blockquote><p>Returns true if a redo is possible.</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="mxUndoManager.redo"></a>redo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">mxUndoManager.prototype.redo = function()</td></tr></table></blockquote><p>Redoes the last change.</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="mxUndoManager.undoableEditHappened"></a>undoableEditHappened</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mxUndoManager.prototype.undoableEditHappened = function(</td><td class="PParameter  prettyprint " nowrap>undoableEdit</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote><p>Method to be called to add new undoable edits to the <a href="#mxUndoManager.history" class=LVariable id=link35 onMouseOver="ShowTip(event, 'tt6', 'link35')" onMouseOut="HideTip('tt6')">history</a>.</p></div></div></div>

<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="mxUndoManager.trim"></a>trim</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">mxUndoManager.prototype.trim = function()</td></tr></table></blockquote><p>Removes all pending steps after <a href="#mxUndoManager.indexOfNextAdd" class=LVariable id=link36 onMouseOver="ShowTip(event, 'tt7', 'link36')" onMouseOut="HideTip('tt7')">indexOfNextAdd</a> from the history, invoking die on each edit.&nbsp; This is called from <a href="#mxUndoManager.undoableEditHappened" class=LFunction id=link37 onMouseOver="ShowTip(event, 'tt11', 'link37')" onMouseOut="HideTip('tt11')">undoableEditHappened</a>.</p></div></div></div>

</div><!--Content-->


<div id=Footer><a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->


<div id=Menu><div class=MEntry><div class=MFile><a href="../index-txt.html">API Specification</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Editor</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../editor/mxDefaultKeyHandler-js.html">mxDefaultKeyHandler</a></div></div><div class=MEntry><div class=MFile><a href="../editor/mxDefaultPopupMenu-js.html">mxDefaultPopupMenu</a></div></div><div class=MEntry><div class=MFile><a href="../editor/mxDefaultToolbar-js.html">mxDefaultToolbar</a></div></div><div class=MEntry><div class=MFile><a href="../editor/mxEditor-js.html">mxEditor</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Handler</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../handler/mxCellHighlight-js.html">mxCellHighlight</a></div></div><div class=MEntry><div class=MFile><a href="../handler/mxCellMarker-js.html">mxCellMarker</a></div></div><div class=MEntry><div class=MFile><a href="../handler/mxCellTracker-js.html">mxCellTracker</a></div></div><div class=MEntry><div class=MFile><a href="../handler/mxConnectionHandler-js.html">mxConnectionHandler</a></div></div><div class=MEntry><div class=MFile><a href="../handler/mxConstraintHandler-js.html">mxConstraintHandler</a></div></div><div class=MEntry><div class=MFile><a href="../handler/mxEdgeHandler-js.html">mxEdgeHandler</a></div></div><div class=MEntry><div class=MFile><a href="../handler/mxEdgeSegmentHandler-js.html">mxEdgeSegmentHandler.js</a></div></div><div class=MEntry><div class=MFile><a href="../handler/mxElbowEdgeHandler-js.html">mxElbowEdgeHandler</a></div></div><div class=MEntry><div class=MFile><a href="../handler/mxGraphHandler-js.html">mxGraphHandler</a></div></div><div class=MEntry><div class=MFile><a href="../handler/mxHandle-js.html">mxHandle</a></div></div><div class=MEntry><div class=MFile><a href="../handler/mxKeyHandler-js.html">mxKeyHandler</a></div></div><div class=MEntry><div class=MFile><a href="../handler/mxPanningHandler-js.html">mxPanningHandler</a></div></div><div class=MEntry><div class=MFile><a href="../handler/mxPopupMenuHandler-js.html">mxPopupMenuHandler</a></div></div><div class=MEntry><div class=MFile><a href="../handler/mxRubberband-js.html">mxRubberband</a></div></div><div class=MEntry><div class=MFile><a href="../handler/mxSelectionCellsHandler-js.html">mxSelectionCellsHandler</a></div></div><div class=MEntry><div class=MFile><a href="../handler/mxTooltipHandler-js.html">mxTooltipHandler</a></div></div><div class=MEntry><div class=MFile><a href="../handler/mxVertexHandler-js.html">mxVertexHandler</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Io</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../io/mxCellCodec-js.html">mxCellCodec</a></div></div><div class=MEntry><div class=MFile><a href="../io/mxChildChangeCodec-js.html">mxChildChangeCodec</a></div></div><div class=MEntry><div class=MFile><a href="../io/mxCodec-js.html">mxCodec</a></div></div><div class=MEntry><div class=MFile><a href="../io/mxCodecRegistry-js.html">mxCodecRegistry</a></div></div><div class=MEntry><div class=MFile><a href="../io/mxDefaultKeyHandlerCodec-js.html">mxDefaultKeyHandlerCodec</a></div></div><div class=MEntry><div class=MFile><a href="../io/mxDefaultPopupMenuCodec-js.html">mxDefaultPopupMenuCodec</a></div></div><div class=MEntry><div class=MFile><a href="../io/mxDefaultToolbarCodec-js.html">mxDefaultToolbarCodec</a></div></div><div class=MEntry><div class=MFile><a href="../io/mxEditorCodec-js.html">mxEditorCodec</a></div></div><div class=MEntry><div class=MFile><a href="../io/mxGenericChangeCodec-js.html">mxGenericChangeCodec</a></div></div><div class=MEntry><div class=MFile><a href="../io/mxGraphCodec-js.html">mxGraphCodec</a></div></div><div class=MEntry><div class=MFile><a href="../io/mxGraphViewCodec-js.html">mxGraphViewCodec</a></div></div><div class=MEntry><div class=MFile><a href="../io/mxModelCodec-js.html">mxModelCodec</a></div></div><div class=MEntry><div class=MFile><a href="../io/mxObjectCodec-js.html">mxObjectCodec</a></div></div><div class=MEntry><div class=MFile><a href="../io/mxRootChangeCodec-js.html">mxRootChangeCodec</a></div></div><div class=MEntry><div class=MFile><a href="../io/mxStylesheetCodec-js.html">mxStylesheetCodec</a></div></div><div class=MEntry><div class=MFile><a href="../io/mxTerminalChangeCodec-js.html">mxTerminalChangeCodec</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent7')">Layout</a><div class=MGroupContent id=MGroupContent7><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent6')">Hierarchical</a><div class=MGroupContent id=MGroupContent6><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">Model</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../layout/hierarchical/model/mxGraphAbstractHierarchyCell-js.html">mxGraphAbstractHierarchyCell</a></div></div><div class=MEntry><div class=MFile><a href="../layout/hierarchical/model/mxGraphHierarchyEdge-js.html">mxGraphHierarchyEdge</a></div></div><div class=MEntry><div class=MFile><a href="../layout/hierarchical/model/mxGraphHierarchyModel-js.html">mxGraphHierarchyModel</a></div></div><div class=MEntry><div class=MFile><a href="../layout/hierarchical/model/mxGraphHierarchyNode-js.html">mxGraphHierarchyNode</a></div></div><div class=MEntry><div class=MFile><a href="../layout/hierarchical/model/mxSwimlaneModel-js.html">mxSwimlaneModel</a></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../layout/hierarchical/mxHierarchicalLayout-js.html">mxHierarchicalLayout</a></div></div><div class=MEntry><div class=MFile><a href="../layout/hierarchical/mxSwimlaneLayout-js.html">mxSwimlaneLayout</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Stage</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MFile><a href="../layout/hierarchical/stage/mxCoordinateAssignment-js.html">mxCoordinateAssignment</a></div></div><div class=MEntry><div class=MFile><a href="../layout/hierarchical/stage/mxHierarchicalLayoutStage-js.html">mxHierarchicalLayoutStage</a></div></div><div class=MEntry><div class=MFile><a href="../layout/hierarchical/stage/mxMedianHybridCrossingReduction-js.html">mxMedianHybridCrossingReduction</a></div></div><div class=MEntry><div class=MFile><a href="../layout/hierarchical/stage/mxMinimumCycleRemover-js.html">mxMinimumCycleRemover</a></div></div><div class=MEntry><div class=MFile><a href="../layout/hierarchical/stage/mxSwimlaneOrdering-js.html">mxSwimlaneOrdering</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../layout/mxCircleLayout-js.html">mxCircleLayout</a></div></div><div class=MEntry><div class=MFile><a href="../layout/mxCompactTreeLayout-js.html">mxCompactTreeLayout</a></div></div><div class=MEntry><div class=MFile><a href="../layout/mxCompositeLayout-js.html">mxCompositeLayout</a></div></div><div class=MEntry><div class=MFile><a href="../layout/mxEdgeLabelLayout-js.html">mxEdgeLabelLayout</a></div></div><div class=MEntry><div class=MFile><a href="../layout/mxFastOrganicLayout-js.html">mxFastOrganicLayout</a></div></div><div class=MEntry><div class=MFile><a href="../layout/mxGraphLayout-js.html">mxGraphLayout</a></div></div><div class=MEntry><div class=MFile><a href="../layout/mxParallelEdgeLayout-js.html">mxParallelEdgeLayout</a></div></div><div class=MEntry><div class=MFile><a href="../layout/mxPartitionLayout-js.html">mxPartitionLayout</a></div></div><div class=MEntry><div class=MFile><a href="../layout/mxRadialTreeLayout-js.html">mxRadialTreeLayout</a></div></div><div class=MEntry><div class=MFile><a href="../layout/mxStackLayout-js.html">mxStackLayout</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent8')">Model</a><div class=MGroupContent id=MGroupContent8><div class=MEntry><div class=MFile><a href="../model/mxCell-js.html">mxCell</a></div></div><div class=MEntry><div class=MFile><a href="../model/mxCellPath-js.html">mxCellPath</a></div></div><div class=MEntry><div class=MFile><a href="../model/mxGeometry-js.html">mxGeometry</a></div></div><div class=MEntry><div class=MFile><a href="../model/mxGraphModel-js.html">mxGraphModel</a></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../mxClient-js.html">mxClient</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent9')">Shape</a><div class=MGroupContent id=MGroupContent9><div class=MEntry><div class=MFile><a href="../shape/mxActor-js.html">mxActor</a></div></div><div class=MEntry><div class=MFile><a href="../shape/mxArrow-js.html">mxArrow</a></div></div><div class=MEntry><div class=MFile><a href="../shape/mxArrowConnector-js.html">mxArrowConnector</a></div></div><div class=MEntry><div class=MFile><a href="../shape/mxCloud-js.html">mxCloud</a></div></div><div class=MEntry><div class=MFile><a href="../shape/mxConnector-js.html">mxConnector</a></div></div><div class=MEntry><div class=MFile><a href="../shape/mxCylinder-js.html">mxCylinder</a></div></div><div class=MEntry><div class=MFile><a href="../shape/mxDoubleEllipse-js.html">mxDoubleEllipse</a></div></div><div class=MEntry><div class=MFile><a href="../shape/mxEllipse-js.html">mxEllipse</a></div></div><div class=MEntry><div class=MFile><a href="../shape/mxHexagon-js.html">mxHexagon</a></div></div><div class=MEntry><div class=MFile><a href="../shape/mxImageShape-js.html">mxImageShape</a></div></div><div class=MEntry><div class=MFile><a href="../shape/mxLabel-js.html">mxLabel</a></div></div><div class=MEntry><div class=MFile><a href="../shape/mxLine-js.html">mxLine</a></div></div><div class=MEntry><div class=MFile><a href="../shape/mxMarker-js.html">mxMarker</a></div></div><div class=MEntry><div class=MFile><a href="../shape/mxPolyline-js.html">mxPolyline</a></div></div><div class=MEntry><div class=MFile><a href="../shape/mxRectangleShape-js.html">mxRectangleShape</a></div></div><div class=MEntry><div class=MFile><a href="../shape/mxRhombus-js.html">mxRhombus</a></div></div><div class=MEntry><div class=MFile><a href="../shape/mxShape-js.html">mxShape</a></div></div><div class=MEntry><div class=MFile><a href="../shape/mxStencil-js.html">mxStencil</a></div></div><div class=MEntry><div class=MFile><a href="../shape/mxStencilRegistry-js.html">mxStencilRegistry</a></div></div><div class=MEntry><div class=MFile><a href="../shape/mxSwimlane-js.html">mxSwimlane</a></div></div><div class=MEntry><div class=MFile><a href="../shape/mxText-js.html">mxText</a></div></div><div class=MEntry><div class=MFile><a href="../shape/mxTriangle-js.html">mxTriangle</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent10')">Util</a><div class=MGroupContent id=MGroupContent10><div class=MEntry><div class=MFile><a href="mxAbstractCanvas2D-js.html">mxAbstractCanvas2D</a></div></div><div class=MEntry><div class=MFile><a href="mxAnimation-js.html">mxAnimation</a></div></div><div class=MEntry><div class=MFile><a href="mxAutoSaveManager-js.html">mxAutoSaveManager</a></div></div><div class=MEntry><div class=MFile><a href="mxClipboard-js.html">mxClipboard</a></div></div><div class=MEntry><div class=MFile><a href="mxConstants-js.html">mxConstants</a></div></div><div class=MEntry><div class=MFile><a href="mxDictionary-js.html">mxDictionary</a></div></div><div class=MEntry><div class=MFile><a href="mxDivResizer-js.html">mxDivResizer</a></div></div><div class=MEntry><div class=MFile><a href="mxDragSource-js.html">mxDragSource</a></div></div><div class=MEntry><div class=MFile><a href="mxEffects-js.html">mxEffects</a></div></div><div class=MEntry><div class=MFile><a href="mxEvent-js.html">mxEvent</a></div></div><div class=MEntry><div class=MFile><a href="mxEventObject-js.html">mxEventObject</a></div></div><div class=MEntry><div class=MFile><a href="mxEventSource-js.html">mxEventSource</a></div></div><div class=MEntry><div class=MFile><a href="mxForm-js.html">mxForm</a></div></div><div class=MEntry><div class=MFile><a href="mxGuide-js.html">mxGuide</a></div></div><div class=MEntry><div class=MFile><a href="mxImage-js.html">mxImage</a></div></div><div class=MEntry><div class=MFile><a href="mxImageBundle-js.html">mxImageBundle</a></div></div><div class=MEntry><div class=MFile><a href="mxImageExport-js.html">mxImageExport</a></div></div><div class=MEntry><div class=MFile><a href="mxLog-js.html">mxLog</a></div></div><div class=MEntry><div class=MFile><a href="mxMorphing-js.html">mxMorphing</a></div></div><div class=MEntry><div class=MFile><a href="mxMouseEvent-js.html">mxMouseEvent</a></div></div><div class=MEntry><div class=MFile><a href="mxObjectIdentity-js.html">mxObjectIdentity</a></div></div><div class=MEntry><div class=MFile><a href="mxPanningManager-js.html">mxPanningManager</a></div></div><div class=MEntry><div class=MFile><a href="mxPoint-js.html">mxPoint</a></div></div><div class=MEntry><div class=MFile><a href="mxPopupMenu-js.html">mxPopupMenu</a></div></div><div class=MEntry><div class=MFile><a href="mxRectangle-js.html">mxRectangle</a></div></div><div class=MEntry><div class=MFile><a href="mxResources-js.html">mxResources</a></div></div><div class=MEntry><div class=MFile><a href="mxSvgCanvas2D-js.html">mxSvgCanvas2D</a></div></div><div class=MEntry><div class=MFile><a href="mxToolbar-js.html">mxToolbar</a></div></div><div class=MEntry><div class=MFile><a href="mxUndoableEdit-js.html">mxUndoableEdit</a></div></div><div class=MEntry><div class=MFile id=MSelected>mxUndoManager</div></div><div class=MEntry><div class=MFile><a href="mxUrlConverter-js.html">mxUrlConverter</a></div></div><div class=MEntry><div class=MFile><a href="mxUtils-js.html">mxUtils</a></div></div><div class=MEntry><div class=MFile><a href="mxVmlCanvas2D-js.html">mxVmlCanvas2D</a></div></div><div class=MEntry><div class=MFile><a href="mxWindow-js.html">mxWindow</a></div></div><div class=MEntry><div class=MFile><a href="mxXmlCanvas2D-js.html">mxXmlCanvas2D</a></div></div><div class=MEntry><div class=MFile><a href="mxXmlRequest-js.html">mxXmlRequest</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent11')">View</a><div class=MGroupContent id=MGroupContent11><div class=MEntry><div class=MFile><a href="../view/mxCellEditor-js.html">mxCellEditor</a></div></div><div class=MEntry><div class=MFile><a href="../view/mxCellOverlay-js.html">mxCellOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../view/mxCellRenderer-js.html">mxCellRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../view/mxCellState-js.html">mxCellState</a></div></div><div class=MEntry><div class=MFile><a href="../view/mxCellStatePreview-js.html">mxCellStatePreview</a></div></div><div class=MEntry><div class=MFile><a href="../view/mxConnectionConstraint-js.html">mxConnectionConstraint</a></div></div><div class=MEntry><div class=MFile><a href="../view/mxEdgeStyle-js.html">mxEdgeStyle</a></div></div><div class=MEntry><div class=MFile><a href="../view/mxGraph-js.html">mxGraph</a></div></div><div class=MEntry><div class=MFile><a href="../view/mxGraphSelectionModel-js.html">mxGraphSelectionModel</a></div></div><div class=MEntry><div class=MFile><a href="../view/mxGraphView-js.html">mxGraphView</a></div></div><div class=MEntry><div class=MFile><a href="../view/mxLayoutManager-js.html">mxLayoutManager</a></div></div><div class=MEntry><div class=MFile><a href="../view/mxMultiplicity-js.html">mxMultiplicity</a></div></div><div class=MEntry><div class=MFile><a href="../view/mxOutline-js.html">mxOutline</a></div></div><div class=MEntry><div class=MFile><a href="../view/mxPerimeter-js.html">mxPerimeter</a></div></div><div class=MEntry><div class=MFile><a href="../view/mxPrintPreview-js.html">mxPrintPreview</a></div></div><div class=MEntry><div class=MFile><a href="../view/mxStyleRegistry-js.html">mxStyleRegistry</a></div></div><div class=MEntry><div class=MFile><a href="../view/mxStylesheet-js.html">mxStylesheet</a></div></div><div class=MEntry><div class=MFile><a href="../view/mxSwimlaneManager-js.html">mxSwimlaneManager</a></div></div><div class=MEntry><div class=MFile><a href="../view/mxTemporaryCellStates-js.html">mxTemporaryCellStates</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent12')">Index</a><div class=MGroupContent id=MGroupContent12><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Cookies.html">Cookies</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Events.html">Events</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Variables.html">Variables</a></div></div></div></div></div><script type="text/javascript"><!--
var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
--></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option  id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Cookies">Cookies</option><option value="Events">Events</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Variables">Variables</option></select></div><script language=JavaScript><!--
HideAllBut([10], 13);// --></script></div><!--Menu-->



<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">mxUndoManager.prototype.clear = function()</td></tr></table></blockquote>Clears the command history.</div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">mxUndoManager.prototype.undo = function()</td></tr></table></blockquote>Undoes the last change.</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">mxUndoManager.prototype.redo = function()</td></tr></table></blockquote>Redoes the last change.</div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>function mxUndoManager(</td><td class="PParameter  prettyprint " nowrap>size</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Constructs a new undo manager with the given history size. </div></div><div class=CToolTip id="tt5"><div class=CVariable><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">mxUndoManager.prototype.size</td></tr></table></blockquote>Maximum command history size. </div></div><div class=CToolTip id="tt6"><div class=CVariable><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">mxUndoManager.prototype.history</td></tr></table></blockquote>Array that contains the steps of the command history.</div></div><div class=CToolTip id="tt7"><div class=CVariable><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">mxUndoManager.prototype.indexOfNextAdd</td></tr></table></blockquote>Index of the element to be added next.</div></div><div class=CToolTip id="tt8"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">mxUndoManager.prototype.isEmpty = function()</td></tr></table></blockquote>Returns true if the history is empty.</div></div><div class=CToolTip id="tt9"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">mxUndoManager.prototype.canUndo = function()</td></tr></table></blockquote>Returns true if an undo is possible.</div></div><div class=CToolTip id="tt10"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">mxUndoManager.prototype.canRedo = function()</td></tr></table></blockquote>Returns true if a redo is possible.</div></div><div class=CToolTip id="tt11"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mxUndoManager.prototype.undoableEditHappened = function(</td><td class="PParameter  prettyprint " nowrap>undoableEdit</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Method to be called to add new undoable edits to the history.</div></div><div class=CToolTip id="tt12"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td class="prettyprint">mxUndoManager.prototype.trim = function()</td></tr></table></blockquote>Removes all pending steps after indexOfNextAdd from the history, invoking die on each edit. </div></div><div class=CToolTip id="tt13"><div class=CClass>Implements a composite undoable edit. </div></div><div class=CToolTip id="tt14"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mxEditor.prototype.installUndoHandler = function (</td><td class="PParameter  prettyprint " nowrap>graph</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Adds the undoManager to the graph model and the view.</div></div><div class=CToolTip id="tt15"><div class=CClass>Action to change the root in a model.</div></div><div class=CToolTip id="tt16"><div class=CClass>Action to add or remove a child in a model.</div></div><div class=CToolTip id="tt17"><div class=CClass>Action to change a terminal in a model.</div></div><div class=CToolTip id="tt18"><div class=CClass>Extends mxEventSource to implement a view for a graph. </div></div><div class=CToolTip id="tt19"><div class=CClass>Extends mxEventSource to implement a graph model. </div></div><div class=CToolTip id="tt20"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class="Prototype"><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class="PBeforeParameters  prettyprint "nowrap>mxEventSource.prototype.addListener = function(</td><td class="PParameter  prettyprint " nowrap>name,</td></tr><tr><td></td><td class="PParameter  prettyprint " nowrap>funct</td><td class="PAfterParameters  prettyprint "nowrap>)</td></tr></table></td></tr></table></blockquote>Binds the specified function to the given event name. </div></div><!--END_ND_TOOLTIPS-->




<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>


<script language=JavaScript><!--
if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>